package xginxgodb

import (
	"encoding/json"
	"fmt"
	"strings"

	"gitee.com/xiaoyutab/xgotool/xgin"
	"gitee.com/xiaoyutab/xgotool/xgodb"
	"gitee.com/xiaoyutab/xgotool/xgodb/xgodbconfig"
	"gitee.com/xiaoyutab/xgotool/xstring"
	"github.com/gin-gonic/gin"
)

// 获取配置项列表
func syncGet(c *gin.Context) *xgin.Response {
	type temp_struct struct {
		Urls string `json:"urls" form:"urls" xml:"urls"` // 来源域名
	}
	temp := temp_struct{}
	if err := xgin.Bind(c, &temp); err != nil {
		return xgin.Resp().Error(err)
	}
	// 正式变量赋值
	// 请使用param进行参数验证、变量效验等操作
	param := temp
	if param.Urls == "" {
		return xgin.Resp().ErrorString("来源域名不能为空")
	}
	// 获取配置项中的域名列表
	// 获取请求值中的url，用于获取AES密钥解析
	aes_key := strings.Split(xgodb.GetString("FRAM_SYNC_URL_AES"), ",")
	aes_url := strings.Split(xgodb.GetString("FRAM_SYNC_URL"), ",")
	if len(aes_key) != len(aes_url) {
		return xgin.Resp().ErrorString("系统项内同步配置项获取失败，请稍后在试")
	}
	// 获取对应的aes_key
	aes := ""
	for i := 0; i < len(aes_url); i++ {
		if aes_url[i] == param.Urls {
			aes = aes_key[i]
			break
		}
	}
	if aes == "" {
		return xgin.Resp().ErrorString("域名对应的AES密钥查找失败，请线下同步后再次尝试")
	}
	// 获取当前所有配置项组列表
	lis, err := xgodbconfig.GroupList(0xffff)
	if err != nil {
		return xgin.Resp().Error(err)
	}
	temp_confs := xgodbconfig.Getconfigure("FRAM_SYNC_DOMAIN_AES")
	for i := 0; i < len(lis); i++ {
		if lis[i].NameGroup == temp_confs.NameGroup {
			lis = append(lis[0:i], lis[i+1:]...)
			break
		}
	}
	fmt.Println("lis_json", lis)
	// 转json
	b, err := json.Marshal(lis)
	if err != nil {
		return xgin.Resp().Error(err)
	}
	// AES加密
	aes_group, err := xstring.Aes(b, []byte(xgodb.GetString("FRAM_SYNC_DOMAIN_AES"))) // 我方密钥加密
	if err != nil {
		return xgin.Resp().Error(err)
	}
	// 转base64
	base_group := xstring.BaseByte64(aes_group)
	// 查询配置项列表
	lis_conf, err := xgodbconfig.List("0xffff")
	if err != nil {
		return xgin.Resp().Error(err)
	}
	// 转json
	json_conf, err := json.Marshal(lis_conf)
	if err != nil {
		return xgin.Resp().Error(err)
	}
	// aes 加密
	aes_conf, err := xstring.Aes(json_conf, []byte(xgodb.GetString("FRAM_SYNC_DOMAIN_AES"))) // 我方密钥加密
	if err != nil {
		return xgin.Resp().Error(err)
	}
	// 转base64
	base_conf := xstring.BaseByte64(aes_conf)
	c.Writer.WriteString(base_group + ".0xffff." + base_conf)
	return nil
}
